home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / mgr / sparcmgr / demo2.zoo / demo / ex / ovdoprnt.s < prev    next >
Encoding:
Text File  |  1983-06-15  |  3.1 KB  |  304 lines

  1. / C library -- conversions
  2. / Overlay modification -- wfj 8/80
  3. / stack frame is one word larger...
  4. / sccs id @(#)ovdoprnt.s    1.2 8/26/80
  5. /
  6.  
  7. / width=-8.
  8. / formp=-10.
  9. / rjust=-12.
  10. / ndfnd=-14.
  11. / ndigit=-16.
  12. / zfill=-18.
  13. width=-10.
  14. formp=-12.
  15. rjust=-14.
  16. ndfnd=-16.
  17. ndigit=-18.
  18. zfill=-20.
  19. .globl    __doprnt
  20.  
  21. .globl    __strout
  22. .globl    csv
  23. .globl    cret
  24.  
  25. __doprnt:
  26.     jsr    r5,csv
  27.     sub    $128.+12.,sp
  28.     mov    4(r5),formp(r5)        / format
  29.     mov    6(r5),r4
  30. loop:
  31.     mov    sp,r3
  32.     mov    formp(r5),r1
  33. 2:
  34.     movb    (r1)+,r2
  35.     beq    2f
  36.     cmp    r2,$'%
  37.     beq    2f
  38.     movb    r2,(r3)+
  39.     br    2b
  40. 2:
  41.     mov    r1,formp(r5)
  42.     cmp    r3,sp
  43.     beq    2f
  44.     mov    sp,r0
  45.     mov    8(r5),-(sp)
  46.     clr    -(sp)
  47.     mov    r3,-(sp)
  48.     sub    r0,(sp)
  49.     mov    r0,-(sp)
  50.     jsr    pc,__strout
  51.     add    $8,sp
  52. 2:
  53.     tst    r2
  54.     bne    2f
  55.     jmp    cret
  56. 2:
  57.     mov    sp,r3
  58. 2:
  59.     clr    rjust(r5)
  60.     clr    ndigit(r5)
  61.     mov    $' ,zfill(r5)
  62.     cmpb    *formp(r5),$'-
  63.     bne    2f
  64.     inc    formp(r5)
  65.     inc    rjust(r5)
  66. 2:
  67.     cmpb    *formp(r5),$'0
  68.     bne    2f
  69.     mov    $'0,zfill(r5)
  70. 2:
  71.     jsr    r3,gnum
  72.     mov    r1,width(r5)
  73.     clr    ndfnd(r5)
  74.     cmp    r0,$'.
  75.     bne    1f
  76.     jsr    r3,gnum
  77.     mov    r1,ndigit(r5)
  78. 1:
  79.     mov    $swtab,r1
  80. 1:
  81.     mov    (r1)+,r2
  82.     bne    2f
  83.     movb    r0,(r3)+
  84.     jmp    prbuf
  85. 2:
  86.     cmp    r0,(r1)+
  87.     bne    1b
  88.     jmp    (r2)
  89.     .data
  90. swtab:
  91.     decimal;    'd
  92.     octal;        'o
  93.     hex;        'x
  94.     charac;        'c
  95.     string;        's
  96.     longorunsg;    'l
  97.     longorunsg;    'L
  98.     unsigned;    'u
  99.     remote;        'r
  100.     long;        'D
  101.     loct;        'O
  102.     lhex;        'X
  103.     lunsigned;    'U
  104.     0;  0
  105.     .text
  106.  
  107. longorunsg:
  108.     movb    *formp(r5),r0
  109.     inc    formp(r5)
  110.     cmp    r0,$'o
  111.     beq    loct
  112.     cmp    r0,$'x
  113.     beq    lhex
  114.     cmp    r0,$'d
  115.     beq    long
  116.     cmp    r0,$'u
  117.     beq    lunsigned
  118.     dec    formp(r5)
  119.     br    unsigned
  120.  
  121. octal:
  122.     clr    r0
  123.     br    1f
  124. loct:
  125.     mov    (r4)+,r0
  126. 1:
  127.     mov    $8.,r2
  128.     br    2f
  129.  
  130. hex:
  131.     clr    r0
  132.     br    1f
  133.  
  134. lhex:
  135.     mov    (r4)+,r0
  136. 1:
  137.     mov    $16.,r2
  138. 2:
  139.     mov    (r4)+,r1
  140.     br    compute
  141.  
  142. decimal:
  143.     mov    (r4)+,r1
  144.     sxt    r0
  145.     bmi    3f
  146.     br    2f
  147.  
  148. unsigned:
  149.     clr    r0
  150.     br    1f
  151.  
  152. long:
  153.     mov    (r4)+,r0
  154.     bge    1f
  155.     mov    (r4)+,r1
  156. 3:
  157.     neg    r0
  158.     neg    r1
  159.     sbc    r0
  160.     movb    $'-,(r3)+
  161.     br    2f
  162.  
  163. lunsigned:
  164.     mov    (r4)+,r0
  165. 1:
  166.     mov    (r4)+,r1
  167. 2:
  168.     mov    $10.,r2
  169.  
  170. /
  171. / Algorithm courtesy Keith Davis
  172. /
  173. compute:
  174.     mov    r5,-(sp)
  175.     mov    r4,-(sp)
  176.     mov    r0,r4
  177.     mov    ndigit(r5),r0
  178.     mov    r1,r5
  179.     ashc    $0,r4
  180.     beq    1f
  181.     tst    r0
  182.     beq    1f
  183.     movb    $'0,(r3)+
  184. 1:
  185.     jsr    pc,1f
  186.     mov    (sp)+,r4
  187.     mov    (sp)+,r5
  188.     br    prbuf
  189.  
  190. 1:
  191.     clr    r0
  192.     mov    r4,r1
  193.     beq    2f
  194.     div    r2,r0
  195.     mov    r0,r4
  196.     mov    r1,r0
  197. 2:
  198.     mov    r5,r1
  199.     asl    r2
  200.     div    r2,r0
  201.     asr    r2
  202.     asl    r0
  203.     cmp    r2,r1
  204.     bgt    2f
  205.     sub    r2,r1
  206.     inc    r0
  207. 2:
  208.     mov    r1,-(sp)
  209.     mov    r0,r5
  210.     bne    2f
  211.     tst    r4
  212.     beq    1f
  213. 2:
  214.     jsr    pc,1b
  215. 1:
  216.     mov    (sp)+,r0
  217.     add    $'0,r0
  218.     cmp    r0,$'9
  219.     ble    1f
  220.     add    $'a-'0-10.,r0
  221. 1:
  222.     movb    r0,(r3)+
  223.     rts    pc
  224.     
  225. charac:
  226.     mov    $' ,zfill(r5)
  227.     mov    (r4)+,r0
  228.     bic    $!377,r0
  229.     beq    prbuf
  230.     movb    r0,(r3)+
  231.     br    prbuf
  232.  
  233. string:
  234.     mov    $' ,zfill(r5)
  235.     mov    ndigit(r5),r1
  236.     mov    (r4),r2
  237.     mov    r2,r3
  238.     bne    1f
  239.     mov    $nulstr,r2
  240.     mov    r2,r3
  241.     mov    r2,(r4)
  242. 1:
  243.     tstb    (r2)+
  244.     beq    1f
  245.     inc    r3
  246.     sob    r1,1b
  247. 1:
  248.     mov    (r4)+,r2
  249.     br    prstr
  250.  
  251. remote:
  252.     mov    (r4)+,r4
  253.     mov    (r4)+,formp(r5)
  254.     jmp    loop
  255.  
  256. prbuf:
  257.     mov    sp,r2
  258. prstr:
  259.     sub    r2,r3
  260.     mov    width(r5),r1
  261.     sub    r3,r1
  262.     bge    1f
  263.     clr    r1
  264. 1:
  265.     tst    rjust(r5)
  266.     bne    1f
  267.     neg    r1
  268. 1:
  269.     mov    zfill(r5),-(sp)
  270.     mov    8(r5),-(sp)
  271.     mov    r1,-(sp)
  272.     mov    r3,-(sp)
  273.     mov    r2,-(sp)
  274.     jsr    pc,__strout
  275.     add    $10.,sp
  276.     jmp    loop
  277.  
  278. gnum:
  279.     clr    ndfnd(r5)
  280.     clr    r1
  281. 1:
  282.     movb    *formp(r5),r0
  283.     inc    formp(r5)
  284.     sub    $'0,r0
  285.     cmp    r0,$'*-'0
  286.     bne    2f
  287.     mov    (r4)+,r0
  288.     br    3f
  289. 2:
  290.     cmp    r0,$9.
  291.     bhi    1f
  292. 3:
  293.     inc    ndfnd(r5)
  294.     mul    $10.,r1
  295.     add    r0,r1
  296.     br    1b
  297. 1:
  298.     add    $'0,r0
  299.     rts    r3
  300.  
  301. .data
  302. nulstr:
  303.     <(null)\0>
  304.